"""
定义文件相关的类
"""
from data_define import Record
import json


# 先定义一个抽象类用来做顶层设计，确定哪些功能需要实现
class FileReader:
    def read_data(self) -> list[Record]:
        """读取文件的数据，读到的每一条数据都转换为Record对象，将他们都封装到list内返回出来即可"""
        pass


class TextFileReader(FileReader):
    def __init__(self, path):
        self.path = path       # 定义成员变量记录文件的路径

    # 复写（实现抽象方法）父类的方法
    def read_data(self) -> list[Record]:
        f = open(self.path, 'r', encoding="UTF-8")
        lines = f.readlines()
        # print(f"111yuan:{lines1}")

        record_list = []
        for line in lines:
            # print(line1)
            line = line.strip()   # 把回车符和前后空格都去除
            # print(line)
            data_list = line.split(",")
            # print(f"111:{data_list}")
            record = Record(data_list[0], data_list[1], int(data_list[2]), data_list[3])  # money 是整数型
            # print(record)
            record_list.append(record)
            # print(record_list)

        f.close()
        return record_list


class JsonFileReader(FileReader):
    def __init__(self, path):
        self.path = path       # 定义成员变量记录文件的路径

    # 复写（实现抽象方法）父类的方法
    def read_data(self) -> list[Record]:
        f = open(self.path, 'r', encoding="UTF-8")
        lines = f.readlines()
        dict_list = []
        for line in lines:
            # print(len(lines))
            # print(f"YuanJJJ:{line}")
            data_dict = json.loads(line)
            # print(f"222:{data_dict}")
            record = Record(data_dict["date"], data_dict["order_id"], data_dict["money"], data_dict["province"])
            dict_list.append(record)
            # print(f"22dict:{dict_list}")
            # print(type(dict_list))

            f.close()
        return dict_list


# if __name__ == '__main__':
#     text1 = TextFileReader("E:/excel学习文档-表格/黑马-可视化案例数据/2011年1月销售数据.txt")
#     text2 = JsonFileReader("E:/excel学习文档-表格/黑马-可视化案例数据/2011年2月销售数据JSON.txt")
#     t1 = text1.read_data()
#     t2 = text2.read_data()
#
#     for l1 in t1:
#         print(f"text:{l1}")
#     for l2 in t2:
#         print(f"json:{l2}")




